#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#include "patient.h"
/*permet de dterminer si l'année est bissextile ou pas*/
int bissextile (int aa)
    {
        if ((aa % 4 == 0) && (aa % 100 != 0 || aa % 400 == 0))
            return 1;
        else
            return 0;
    }
/*retourn si la date saisie est correcte ou pas*/
    int date_correcte (int jj, int mm, int aa)
    {
        int jj_max;
        switch (mm)
        {
            case 1: jj_max = 31;//janvier
                break;
            case 2: if (bissextile (aa))//fevrier
                        jj_max = 29;
                    else
                        jj_max = 28;
                break;
            case 3: jj_max = 31;//mars
                break;
            case 4: jj_max = 30;//avrile
                break;
            case 5: jj_max = 31;//Mai
                break;
            case 6: jj_max = 30;//juin
                break;
            case 7: jj_max = 31;//juillet
                break;
            case 8: jj_max = 31;//aout
                break;
            case 9: jj_max = 30;//septembre
                break;
            case 10: jj_max = 31;//octobre
                break;
            case 11: jj_max = 30;//nouvembre
                break;
            case 12 : jj_max = 31;//decembre
                break;
            default : return 0;
        }
        if ((jj <= 0) || (jj > jj_max) ||(aa < 2014))//si le nombre de jour est correcte && l'année n'est pas ancienne
            return 0;
        else
            return 1;
    }
/*saisire une variable de type Date*/
void saisir_date (Date *d)
  {
    do

{
printf ("\t\t\tEntrez la date (jj/mm/aa)\n\n\n" );
printf("\njour: ");
scanf("%d",&(d->jj));
printf("\nmois: ");
scanf("%d",&(d->mm));
printf("\nAnnee: ");
scanf("%d",&(d->aa));
}while (!(date_correcte (d->jj, d->mm, d->aa)));
 }   
/*afficher une variable de type Date*/
void afficher_date(Date d)
{
printf("\n%d/%d/%d",d.jj,d.mm,d.aa);
}
/*convertir le fichier patient en un tableau*/
void remplir_liste_patient(char liste_pat[],Patient t[],int *n)
{FILE *f;Patient p;
f=fopen(liste_pat,"rb");
 if(f!=NULL)
 {
  while(fread(&p,sizeof(Patient),1,f)!=0);
  {
      t[*n]=p;
      *n=*n+1;
  }
}
else
printf("\nImpossible d ouvrir le fichier");
}
/*saisire une variable de type Patient*/
void saisir_patient(Patient *p)
{
printf("\nnom: ");
scanf("%s",p->nom);
printf("\nPrenom: ");
scanf("%s",p->prenom);
printf("\nsexe: ");
scanf("%s",p->sexe);
do
{
printf("\nIdentifiant: ");
scanf("%ld",&p->ide);
}
while(p->ide<1000);
do
{
printf("\n age: ");
scanf("%d",&p->age);
}
while(p->age<12);
saisir_date(&p->d);
}
/*ajouter un patient a la liste*/
void enrigistrer_patient(Patient t[],int *n,Patient p)
{
t[*n]=p;
*n=*n+1;
}
/*verifier si un patient existe dans la liste ou pas*/
int rechercher_Patient(Patient t[],int n,long int ide)
{int i;
for(i=0;i<n;i++)
{
    if(t[i].ide==ide)
    return (i);

}
return -1;
}
/*supprimer un patient de la liste*/
void supprimer_patient(Patient t[],int *n,long int ide)
{int n1;int i;
n1=rechercher_Patient(t,*n,ide);
  if(*n!=-1)
 { for(i=n1;i<*n;i++)
   {
    t[i]=t[i+1];
    *n=*n-1;
   }
 }
 else
 printf("\nle patient n existe pas");

}
/*afficher les données d'un seul patient*/
void afficher_patient(Patient p)
{
printf("\nNom: %s\nPrenom: %s\nSexe: %s\nIdentifiant: %ld\nAge: %d\n",p.nom,p.prenom,p.sexe,p.ide,p.age);
afficher_date(p.d);
}
/*afficher les données de tous les patients*/
void afficher_liste_patient(Patient t[],int n)
{int i;

 for(i=0;i<n;i++)
 {
 afficher_patient(t[i]);
 }
}
/*convertir le tableau de Patient en un fichier*/
void enregistre_liste_patient(Patient t[],int n,char liste_patient[],char nouveau_liste_patient[])
{FILE *f;int i;
 f=fopen(nouveau_liste_patient,"ab");
   for(i=0;i<n;i++)
  
  fwrite(&t[i],sizeof(Patient),1,f);
  
fclose(f);
remove(liste_patient);
rename(nouveau_liste_patient,liste_patient);
 
}


